index.html.vue 15 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445
  1. <template>
  2. <div id="newsList">
  3. <!-- 页面头部 -->
  4. <HomePageHead></HomePageHead>
  5. <!-- 导航栏 -->
  6. <HomePageNavigation></HomePageNavigation>
  7. <!-- 二级标题-->
  8. <!--<div class="sannongzhichuang" v-if="parent_name != ''">
  9. <div class="inner">
  10. <h2>
  11. <NuxtLink :to="`/${parent_pinyin}/index.html`"> {{ parent_name }}</NuxtLink>
  12. <em class="iconfont icon-xingzhuang-zhijiaosanjiaoxing-copy"></em>
  13. </h2>
  14. <p class="introduction">
  15. <strong>频道介绍</strong>
  16. <div v-for="(item, index) in secondNav" :key="index">
  17. <span v-if="index <= 7">
  18. <NuxtLink :to="{ path: `/${item.aLIas_pinyin}/list-1.html`}">{{ item.alias }}</NuxtLink>
  19. </span>
  20. <b v-else></b>
  21. </div>
  22. </p>
  23. </div>
  24. </div>-->
  25. <!-- 面包屑导航 -->
  26. <div class="breadcrumb-box">
  27. <div class="inner">
  28. <span class="location">当前位置:</span>
  29. <el-breadcrumb :separator-icon="ArrowRight">
  30. <el-breadcrumb-item>
  31. <NuxtLink to="/">首页</NuxtLink>
  32. </el-breadcrumb-item>
  33. <el-breadcrumb-item v-if="parent_name !=''">
  34. <NuxtLink :to="`/${parent_pinyin}/index.html`"> {{ parent_name }}</NuxtLink>
  35. </el-breadcrumb-item>
  36. <el-breadcrumb-item>{{ name }}</el-breadcrumb-item>
  37. </el-breadcrumb>
  38. </div>
  39. </div>
  40. <!-- 资讯列表 -->
  41. <div class="newsList">
  42. <div class="listBox">
  43. <div class="listBoxLeft">
  44. <ul class="list">
  45. <li v-for="(item, index) in newsList" :key="index">
  46. <NuxtLink :href="getLinkPathDetail(item)" :title="item.alias">
  47. {{ item.title }}
  48. </NuxtLink>
  49. <p>
  50. <NuxtLink :href="getLinkPathDetail(item)" :title="item.alias">
  51. {{ item.title }}
  52. </NuxtLink>
  53. </p>
  54. </li>
  55. </ul>
  56. <!-- 分页器 -->
  57. <div class="pagination" v-if="total > 0">
  58. <el-pagination
  59. size="small"
  60. background
  61. layout="prev, pager, next"
  62. :total="total"
  63. class="mt-4"
  64. :page-size="pageSize"
  65. :current-page="pageNum"
  66. prev-text="上一页"
  67. next-text="下一页"
  68. @current-change="changePage"
  69. />
  70. <span class="total">共{{ total }}条</span>
  71. </div>
  72. </div>
  73. <div class="listBoxRight">
  74. <!-- <DetailHotNews></DetailHotNews> -->
  75. <DetailHotNews2></DetailHotNews2>
  76. </div>
  77. </div>
  78. </div>
  79. <!-- 页面底部 -->
  80. <HomeFoot></HomeFoot>
  81. </div>
  82. </template>
  83. <script setup>
  84. //1.页面必备依赖 start ---------------------------------------->
  85. import { ElBreadcrumb, ElBreadcrumbItem, ElPagination } from 'element-plus'
  86. import { ArrowRight } from '@element-plus/icons-vue'
  87. import { ref, onMounted } from 'vue';
  88. //当前列表名称
  89. const name = ref('')
  90. const { $webUrl, $CwebUrl, $BwebUrl } = useNuxtApp()
  91. //格式化跳转路径
  92. const getLinkPathDetail = (item) => {
  93. if (item.islink == 1) {
  94. return `${item.linkurl}`;
  95. } else {
  96. return `/${item.pinyin}/${item.id}.html`;
  97. }
  98. }
  99. //1.页面必备依赖 end ---------------------------------------->
  100. //1.获得路由id start ---------------------------------------->
  101. const route = useRoute();
  102. let articleId = 0;//路由id
  103. let pageNum = ref(2);
  104. let total = ref(1);
  105. let pageSize = ref(10);
  106. //获得当前的完整路径
  107. const fullPath = route.path;
  108. //拆分,取出来中间这一段,然后提取数字部分
  109. const segments = fullPath.split('/');
  110. const targetSegment = segments[1];
  111. //通过导航路径反向查询导航id
  112. const getRouteId = await requestDataPromise('/web/getWebsiteRoute', {
  113. method: 'GET',
  114. query: {
  115. 'pinyin': targetSegment,
  116. },
  117. });
  118. if(getRouteId.code == 200){
  119. articleId = getRouteId.data.category_id
  120. }else{
  121. console.log("SSR waring ---------- SSR waring ---------- SSR waring ---------->")
  122. console.log("错误位置:通过url路径查询导航池id")
  123. console.log("后端错误反馈:",getRouteId.message)
  124. console.log("SSR waring ---------- SSR waring ---------- SSR waring ---------->")
  125. }
  126. pageNum.value = parseInt(route.params.id);
  127. //1.获得路由id end ---------------------------------------->
  128. //2.页面数据 start ---------------------------------------->
  129. //2.2新闻列表
  130. const newsList = ref([]);
  131. let newslists = async () => {
  132. const listData = await requestDataPromise('/web/getWebsiteArticleList', {
  133. method: 'GET',
  134. query: {
  135. 'page': pageNum.value,
  136. 'pageSize': pageSize.value,
  137. 'catid': articleId
  138. },
  139. });
  140. if (listData.code == 200) {
  141. newsList.value = listData.data.rows;
  142. total.value = listData.data.count;
  143. } else {
  144. // console.log("SSR waring ---------- SSR waring ---------- SSR waring ---------->")
  145. // console.log("错误位置:获取新闻列表")
  146. // console.log("后端错误反馈:", listData.message)
  147. // console.log("SSR waring ---------- SSR waring ---------- SSR waring ---------->")
  148. }
  149. }
  150. //获得列表
  151. newslists();
  152. //分页事件
  153. let changePage = (value) => {
  154. console.log("当前页码", value);
  155. navigateTo(`/${targetSegment}/list-${value}.html`)
  156. }
  157. //2.3获得页面名称
  158. let getPageName = async () => {
  159. const pageName = await requestDataPromise('/web/getOneWebsiteCategory', {
  160. method: 'GET',
  161. query: {
  162. 'catid': articleId
  163. },
  164. });
  165. if (pageName.code == 200) {
  166. name.value = pageName.data.alias
  167. } else {
  168. // console.log("SSR waring ---------- SSR waring ---------- SSR waring ---------->")
  169. // console.log("错误位置:设置页面标题")
  170. // console.log("后端错误反馈:", pageName.message)
  171. // console.log("SSR waring ---------- SSR waring ---------- SSR waring ---------->")
  172. }
  173. }
  174. //获得列表
  175. getPageName();
  176. //2.页面数据 end ---------------------------------------->
  177. //3.二级栏目 start ---------------------------------------->
  178. //3.1通过id获取父栏目
  179. const parent_name = ref([]);
  180. const parent_id = ref([]);
  181. const parent_pinyin = ref("");
  182. let getParentNav = async () => {
  183. const listData = await requestDataPromise('/web/getOneWebsiteCategory', {
  184. method: 'GET',
  185. query: {
  186. 'catid': articleId
  187. },
  188. });
  189. if (listData.code == 200) {
  190. console.log(111999)
  191. console.log(listData.data);
  192. parent_name.value = listData.data.parent_name;
  193. parent_id.value = listData.data.parent_id;
  194. parent_pinyin.value = listData.data.parent_pinyin;
  195. } else {
  196. // console.log("SSR waring ---------- SSR waring ---------- SSR waring ---------->")
  197. // console.log("错误位置:获取新闻列表")
  198. // console.log("后端错误反馈:", listData.message)
  199. // console.log("SSR waring ---------- SSR waring ---------- SSR waring ---------->")
  200. }
  201. getSecondNav();
  202. }
  203. //获得列表
  204. getParentNav();
  205. // 3.2获取二级栏目
  206. const secondNav = ref([]);
  207. let getSecondNav = async () => {
  208. const listData = await requestDataPromise('/web/getWebsiteModelCategory', {
  209. method: 'GET',
  210. query: {
  211. 'placeid': 1,
  212. 'pid': parent_id.value,
  213. 'num': 8,
  214. },
  215. });
  216. console.log('listData', listData);
  217. if (listData.code == 200) {
  218. secondNav.value = listData.data
  219. } else {
  220. console.log("SSR waring ---------- SSR waring ---------- SSR waring ---------->")
  221. console.log("错误位置:获取新闻列表")
  222. console.log("后端错误反馈:", listData.message)
  223. console.log("SSR waring ---------- SSR waring ---------- SSR waring ---------->")
  224. }
  225. }
  226. //3.二级栏目 end ---------------------------------------->
  227. //4.设置seo信息 start---------------------------------------->
  228. //4.1 设置seo信息
  229. const setData = await requestDataPromise('/web/getWebsiteCategoryHead', {
  230. method: 'GET',
  231. query: {
  232. 'catid': articleId
  233. },
  234. });
  235. if (setData.code == 200) {
  236. let seoTitle = setData.data.seo_title;
  237. let seoDescription = setData.data.seo_description;
  238. let seoKeywords = setData.data.seo_keywords;
  239. let seoSuffix = setData.data.suffix;
  240. let seoName = setData.data.website_name;
  241. useSeoMeta({
  242. title: seoTitle + "_" + seoName + "_" + seoSuffix,
  243. meta: [
  244. { name: 'description', content: seoDescription + "_" + seoName + "_" + seoSuffix , tagPriority: 10 },
  245. { name: 'keywords', content: seoKeywords + "_" + seoName + "_" + seoSuffix , tagPriority: 10 },
  246. { name: 'viewport', content: 'width=device-width,initial-scale=1,user-scalable=no',tagPriority: 10 }
  247. ]
  248. });
  249. } else {
  250. // console.log("SSR waring ---------- SSR waring ---------- SSR waring ---------->")
  251. // console.log("错误位置:设置列表页面SEO数据")
  252. // console.log("后端错误反馈:", setData.message)
  253. // console.log("SSR waring ---------- SSR waring ---------- SSR waring ---------->")
  254. }
  255. //4.设置seo信息 end---------------------------------------->
  256. //5.广告 start---------------------------------------->
  257. let adImg1 = ref({});
  258. let adImg2 = ref({});
  259. onMounted(async () => {
  260. //从客户端获取行政职能部门 加快打开速度
  261. const { $webUrl, $CwebUrl } = useNuxtApp();
  262. //广告1
  263. let url = `${$webUrl}/web/getWebsiteAdvertisement?ad_tag=snzxw_list_0001`
  264. const responseAd1 = await fetch(url, {
  265. headers: {
  266. 'Content-Type': 'application/json',
  267. 'Userurl': $CwebUrl,
  268. 'Origin': $CwebUrl
  269. }
  270. });
  271. const resultAd1 = await responseAd1.json();
  272. adImg1.value = resultAd1.data[0];
  273. //广告2
  274. let url2 = `${$webUrl}/web/getWebsiteAdvertisement?ad_tag=snzxw_list_0002`
  275. const responseAd2 = await fetch(url2, {
  276. headers: {
  277. 'Content-Type': 'application/json',
  278. 'Userurl': $CwebUrl,
  279. 'Origin': $CwebUrl
  280. }
  281. });
  282. const resultAd2 = await responseAd2.json();
  283. adImg2.value = resultAd2.data[0];
  284. })
  285. //5.广告 end---------------------------------------->
  286. </script>
  287. <style lang="less" scoped>
  288. //面包屑
  289. .breadcrumb-box {
  290. width: 1400px;
  291. margin: 0 auto;
  292. .inner {
  293. width: 100%;
  294. height: 22px;
  295. margin-top: 20px;
  296. margin-bottom: 20px;
  297. font-family: Microsoft YaHei, Microsoft YaHei;
  298. font-weight: 400;
  299. font-size: 20px;
  300. color: #666666;
  301. line-height: 23px;
  302. text-align: left;
  303. font-style: normal;
  304. text-transform: none;
  305. display: flex;
  306. align-items: center;
  307. border-bottom: 1px dashed #ccc;
  308. margin-bottom: 10px;
  309. padding: 20px 20px 20px 0;
  310. box-sizing: border-box;
  311. a {
  312. font-size: 16px;
  313. color: #000;
  314. line-height: 20px;
  315. }
  316. span {
  317. font-size: 16px;
  318. color: #000;
  319. line-height: 20px;
  320. &.location {
  321. line-height: 20px;
  322. }
  323. }
  324. }
  325. }
  326. //资讯列表
  327. .newsList {
  328. width: 1400px;
  329. margin: 0 auto;
  330. .listBox {
  331. display: flex;
  332. align-items: flex-start;
  333. justify-content: space-between;
  334. .listBoxLeft {
  335. width: 1030px;
  336. .list {
  337. >li {
  338. width: 100%;
  339. height: auto;
  340. overflow: hidden;
  341. border-bottom: 1px dashed #ccc;
  342. margin-top: 30px;
  343. padding-bottom: 30px;
  344. a {
  345. color: #337ab7;
  346. text-decoration: none;
  347. display: block;
  348. width: 100%;
  349. height: 22px;
  350. line-height: 22px;
  351. font-size: 20px;
  352. font-weight: bold;
  353. color: #333;
  354. overflow: hidden;
  355. word-break: keep-all;
  356. white-space: nowrap;
  357. overflow: hidden;
  358. text-overflow: ellipsis;
  359. }
  360. p {
  361. a {
  362. width: 100%;
  363. height: 72px;
  364. line-height: 24px;
  365. overflow: hidden;
  366. font-size: 14px;
  367. color: #666;
  368. font-weight: normal;
  369. }
  370. }
  371. }
  372. }
  373. }
  374. .listBoxRight {
  375. width: 315px;
  376. overflow: hidden;
  377. }
  378. }
  379. }
  380. //分页
  381. .pagination {
  382. height: 34px;
  383. display: flex;
  384. justify-content: center;
  385. margin: 0;
  386. width: 100%;
  387. overflow: hidden;
  388. margin: 20px 0;
  389. padding: 20px 0;
  390. // 鼠标移入后字体颜色
  391. .el-pagination::v-deep :hover {
  392. color: #139609;
  393. }
  394. .el-pagination.is-background::v-deep .btn-next,
  395. .el-pagination.is-background::v-deep .btn-prev {
  396. width: 70px;
  397. height: 34px;
  398. margin: 0px 10px;
  399. border-radius: 4px;
  400. }
  401. .el-pagination.is-background::v-deep .el-pager li {
  402. margin: 0px 10px;
  403. width: 38px;
  404. height: 34px;
  405. border-radius: 4px;
  406. }
  407. .el-pagination.is-background::v-deep .btn-next.is-active,
  408. .el-pagination.is-background::v-deep .btn-prev.is-active,
  409. .el-pagination.is-background::v-deep .el-pager li.is-active {
  410. background-color: #337ab7;
  411. color: #fff;
  412. }
  413. .total {
  414. display: block;
  415. height: 34px;
  416. line-height: 34px;
  417. font-size: 18px;
  418. margin-left: 20px;
  419. }
  420. }
  421. </style>